/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package negocio;

import javax.ejb.Remote;

/**
 *
 * @author Ing. Monica Merlo, Ing. Agustin  Fernandez
 */
@Remote
public interface GestorUsuarioRemote {

    /***
     * Retorna todas las instancias Usuario
     * @return lista con todas las instancias de Usuario
     * y null en caso contrario
     * interfaz remota
     */
    public java.util.List usuariosRemote();

    /***
     * Retorna una instancia TipoDocumento que su nombre
     * coincida con el valor del parametro nombre.
     * @param nombre
     * @return instancia TipoDocumento con tipo = nombre y null en caso contrario
     * interfaz remota
     */
    public datos.TipoDocumento encontrarTipoDocumentoRemote(java.lang.String nombre);


    /***
     * Agrega una nueva instancia de tipo Usuario en la BD.
     * @param nombre
     * @param apellido
     * @param usuario
     * @param password
     * @param numeroDocumento
     * @param tipoDocumento
     * @param calle
     * @param numeroCalle
     * @param barrio
     * @param piso
     * @param depto
     * @param codPostal
     * @param idLocalidad
     * @param idPais
     * @param permisos
     * @return ID de la nueva instancia de Usuario si ésta ha sido persistida con exito en la base de datos
     * y -1 en caso contrario
     * interfaz remota
     */
    public int agregarUsuarioRemote(java.lang.String nombre, java.lang.String apellido, java.lang.String usuario, java.lang.String password, int numeroDocumento, java.lang.String tipoDocumento, java.lang.String calle, java.lang.String numeroCalle, java.lang.String barrio, int piso, java.lang.String depto, java.lang.String codPostal, int idLocalidad, int idPais, java.util.List<String> permisos);

    /***
     * Devuelve todos los nombres de las instancias de tipo Permiso
     * @return lista con todos los nombres ordenados de las instancias de Permiso
     * y null en caso contrario
     * interfaz remota
     */
    public java.util.List<java.lang.String> permisosRemote();

    /***
     * Busca una instancia Permiso con nombre igual al valor del parametro nombrePermiso
     * @param nombrePermiso
     * @return instancia de Permiso con nombre = nombrePermiso
     * y null en caso contrario
     * interfaz remota
     */
    public datos.Permiso encontrarPermisoPorNombreRemote(java.lang.String nombrePermiso);

    /***
     * Busca una instancia Usuario con ID igual al valor del parametro idUsuario
     * @param idUsuario
     * @return instancia Usuario con id = idUsuario
     * y null en caso contrario
     * interfaz remota
     */
    public datos.Usuario encontrarUsuarioPorIdRemote(int idUsuario);

     /***
     * Actualiza una instancia de tipo Usuario, previamente encontrada en la BD.
     * @param idUsuario
     * @param nombre
     * @param apellido
     * @param usuario
     * @param password
     * @param numeroDocumento
     * @param tipoDocumento
     * @param calle
     * @param numeroCalle
     * @param barrio
     * @param piso
     * @param depto
     * @param codPostal
     * @param idLocalidad
     * @param idPais
     * @param permisos
     * @return true si la instancia de Usuario ha sido modificada y persistida con exito en la base de datos
     * y false en caso contrario
     * interfaz remota
     */
    public boolean modificarUsuarioRemote(int idUsuario, java.lang.String nombre, java.lang.String apellido, java.lang.String usuario, java.lang.String password, int numeroDocumento, java.lang.String tipoDocumento, java.lang.String calle, java.lang.String numeroCalle, java.lang.String barrio, int piso, java.lang.String depto, java.lang.String codPostal, int idLocalidad, int idPais, java.util.List<java.lang.String> permisos);

     /***
     * Remueve una instancia de tipo Usuario de la BD.
     * @param idUsuario
     * @return true si la instancia de Usuario ha sido encontrada por su idUsuario y
     * removida, junto con sus relaciones a clases, con exito de la base de datos
     * y false en caso contrario
     * interfaz remota
     */
    public boolean eliminarUsuarioRemote(int idUsuario);

    /***
     * Valida la existencia de alguna instancia de tipo Usuario, con
     * nombre igual al valor del parametro nombreUsuario.
     * @param nombreUsuario
     * @return true si existe alguna instancia de Usuario con usuario = nombreUsuario
     * y false en caso contrario
     * interfaz remota
     */
    public boolean existeNombreUsuarioRemote(java.lang.String nombreUsuario);

     /***
     * Valida que no exista una instancia de tipo Usuario, cuyo nombre coincida
     * con el nuevo valor del parametro usuario.
     * @param usuario
     * @param id
     * @return true si existe alguna instancia Usuario con usuario = "usuario"
     * y id <> "id". False en caso contrario
     * interfaz remota
     */
    public boolean existeNombreUsuarioModificarRemote(java.lang.String usuario, int id);

    /***
     * Realiza una busqueda de las instancias de tipo Usuario
     * que coincidan con el criterio de busqueda.
     * @param nombre
     * @param apellido
     * @param usuario
     * @return lista de todos aquellas instancias Usuario con nombre como "nombre",
     * apellido como "apellido", usuario como "usuario" ordenados por usuario". Null en caso contrario
     * interfaz remota
     */
    public java.util.List filtrarUsuariosRemote(java.lang.String nombre, java.lang.String apellido, java.lang.String usuario);

   
    /***
     * Modifica la clave del usuario, cuando este lo elige.
     * @param usuario
     * @param passwordNuevo
     * @return true si se ha actualizado la clave correctamente y false en caso contrario
     */
    public boolean modificarClaveRemote(java.lang.String usuario, java.lang.String passwordNuevo);

    /***
     * Método que devuelve el skin seleccionado por el usuario
     * @param nombreUsuario El nombre del usuario
     * @return devuelve el skin seleccionado por el usuario
     */
    public java.lang.String skinSeleccionadoRemote(java.lang.String nombreUsuario);

    /***
     * Modifica el skin del usuario, cuando este lo elige.
     * @param usuario el usuario que cambia su skin
     * @param skinNuevo el nuevo skin elegido por el usuario
     * @return true si se ha actualizado el skin correctamente y false en caso contrario
     */
    public boolean modificarSkinSeleccionadoRemote(java.lang.String usuario, java.lang.String skinNuevo);

    public boolean validarClaveActualUsuarioRemote(java.lang.String usuario, int id, java.lang.String clave);
      
}
